ストレージのパスを取得するには、Environment.getExternalStorageDirectory()関数を使用します。
例として、カメラで撮った写真の画像をアプリケーション内で取得してみます。
手元のキーボードを撮影しました。ギャラリーなどから、ファイルのパスを確認することが出来ます。
ImageViewを1つ配置して、次のようなコードを書いて実行してみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ImageView img = (ImageView)findViewById(R.id.img); String path = Environment.getExternalStorageDirectory().getPath(); File dir = new File(path+"/DCIM/Camera/"); File file = new File(dir.getAbsolutePath()+"/P_20131213_094827.jpg"); if (file.exists()) { img.setImageBitmap(BitmapFactory.decodeFile(file.getPath())); }else{ Log.d("StorageAccessTest","File not found."); } } |
実行すると、ImageViewに撮影したキーボードの写真が表示されます。
さて、Environment.getExternalStorageDirectory()関数だけで全て解決すれば問題はないのですが、Androidの機種によってこの関数が返す値の意味が異なってきます。
例に挙げたアプリケーションはASUS MeMO Pad HD 7で実行したのですが、この機種の場合、この関数で実際に返されるパスは、内部ストレージのパスとなっています(なので、このエントリーのタイトルも「ストレージ」のパスと書きました)。
関数名にかかわらず、機種に内部ストレージと外部ストレージがある場合、上記関数では内部ストレージのパスを返すようです。
外部ストレージのパスを取得するAPIはというと…、ないようです。
ではどうすればよいかというと、Androidのシステム設定ファイル(/system/etc/vold.fstab)を見る方法があります。
この件について詳しくは、詳しく解説されている方の記事が既にありますので、そちらを参照すると良いでしょう。